import axios from 'axios'
import { Toast } from 'vant';
import store from '@/store/index'
import router from '../router';
// 接口白名单
const whiteUrl = ['/api/web/dynamic/getDynamicList', '/api/web/home/getIndexList', '/api/web/home/getSlideList', '/api/web/home/getTodayFate', '/api/web/public/userLogin', '/api/web/public/userRegister', '/api/web/home/getApp', '/report']  // 请求白名单，不需要携带 Token 的请求
const request = axios.create({
  baseURL: '',
  // withCredentials: true,
  headers: {
    "XX-Device-Type": "web",
  },
  // timeout: 5000 // 超时时间
})

// 请求拦截器
request.interceptors.request.use(
  config => {
    // console.log(config)
    const url = config.url.replace(config.baseURL, '')
    // const url = config.url
    // 判断请求的url是否在白名单中，存在就直接 return config ，不携带 Token
    if (whiteUrl.some(wl => url === wl)) {
      if (url == '/api/web/home/getIndexList' || url == '/api/web/dynamic/getDynamicList' || url == '/api/web/home/getTodayFate') {
        config.headers['XX-Token'] = store.getters.getLocToken
      }
      //上报接口重定向
      if (url == '/report') {
        config.baseURL = 'https://statistic.happytalk.tw/statistic/v1'
        config.headers = {};
      }
      return config
    }
    if (!store.getters.getLocToken) {
      router.back()
      store.commit('NEW_REGISTER_TS', true)
      // store.commit('REGISTER_POP', true)
      // store.commit('LOGIN_POP',true)
    }
    // 上傳圖片重定向URL
    if (url == '/common/upload') {
      config.headers['Content-Type'] = 'multipart/form-data';
      config.baseURL = api.uploadUrl
      // config.baseURL = 'http://web.dilsemeet.com:9091'
    }
    config.headers['XX-Token'] = store.getters.getLocToken
    return config
  },
  error => {
    // 将异常返回给用户处理
    return Promise.reject(error)
  }
)

// 响应拦截器
request.interceptors.response.use(
  response => {
    const res = response.data
    // 根据业务中定义的状态判断 例如：error_code 为 0 时判定为异常，即将异常返回信息给用户
    if (res.code == 10001) {
      store.dispatch('logout')
      return response
    } else {
      return response
    }
  },
  error => {
    Toast.clear();
    Toast(error.message);
    return Promise.reject(error)
  }
)

export default request